#include <iostream>
#include "binarytree.h"

using namespace std;

void print (char c)
{
    cout << c;
}

int main ()
{
    //建立二叉树
    //      -
    //   a        *
    //         b    c 
    auto pa = new BiTNode<char>{'a',nullptr,nullptr};
    auto pb = new BiTNode<char>{'b',nullptr,nullptr};
    auto pc = new BiTNode<char>{'c',nullptr,nullptr};
    auto pm = new BiTNode<char>{'*',pb, pc };
    auto ps = new BiTNode<char>{'-',pa, pm };

    auto T = ps ;

    //先序遍历
    Preorder(T,print); cout << endl;
    //中序遍历
    Inorder(T,print); cout << endl;
    //后序遍历
    Postorder(T,print); cout << endl;

    //d打印二叉树
    Print (T);

    //结点数，叶子结点数，高度
    cout << " NodeCount:" << NodeCount (T) << endl;
    cout << " LeafCount:" << LeafCount (T) << endl;
    cout << " Depth:" << Depth (T) << endl;

    //销毁二叉树
    Destroy (T);
    Print(T);

    //建立二叉树
    BiTree <char> t = nullptr;
    t = CreateBinaryTree();
    Print(t);

    Destroy (t);


    BiTree<int> bst = nullptr;
    int a[] = {13, 24, 37, 90, 53, 40, 20};
    for (int x : a)
        InsertBST ( bst, x);
    
    Print(bst);

    cout << "Min: " << FindMinBST (bst)->data << endl;
    cout << "Max: " << FindMaxBST (bst)->data << endl;

    cout << "Delete " << 40 << endl;
    DeleteBST (bst , 40);
    Print (bst);

    cout << "Delete " << 37 << endl;
    DeleteBST (bst, 37);
    Print (bst);

    cout << "Delete " << 24 << endl;
    DeleteBST (bst,24);
    Print (bst);

    Destroy (bst);

    return 0;
}